
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
 */
package itm.bo.personas;

//~--- non-JDK imports --------------------------------------------------------

import itm.conexion.SQLServerConection;

import itm.dao.personas.PersonaDAO;

import itm.exception.ControlException;

import itm.vo.administracion.InstitucionVO;
import itm.vo.administracion.OcupacionesVO;
import itm.vo.administracion.RolVo;
import itm.vo.administracion.TipoIdentificacionVO;
import itm.vo.administracion.facultadesVO;
import itm.vo.personas.GlobalPersonaTO;
import itm.vo.personas.PersonaOcupacionVO;
import itm.vo.personas.PersonaRolVO;
import itm.vo.personas.PersonaVO;

//~--- JDK imports ------------------------------------------------------------

import java.sql.Connection;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Fabio Andrés Cárdenas Londoño
 */
public class PersonasBO {
    SQLServerConection conexion = new SQLServerConection();
    Connection         dbConexion;
    PersonaDAO         personaDAO;

    public String crearPersona(PersonaVO personaVO, PersonaOcupacionVO ocupacionVO, String[] idRol)
            throws ControlException {
        String       errorM  = "";
        String       errorM2 = "";
        PersonaRolVO pRolVO;

        try {
            dbConexion = conexion.openConnection();
            personaDAO = new PersonaDAO(dbConexion);
            errorM     = personaDAO.crearPersona(personaVO, ocupacionVO);

            if (errorM.equals("La operacion fue exitosa")) {
                for (int i = 0; i < idRol.length; i++) {
                    pRolVO = new PersonaRolVO();
                    pRolVO.setIdRol(idRol[i]);
                    pRolVO.setIdPersona(personaVO.getIdPersona());
                    errorM2 = personaDAO.insertarRolPersona(pRolVO);

                    if (!errorM2.equals("OK")) {
                        errorM = errorM2;
                    }
                }
            }
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return errorM;
    }

    public List<TipoIdentificacionVO> llenarListaTipoId() throws ControlException {
        List<TipoIdentificacionVO> listaTipo = new ArrayList<TipoIdentificacionVO>();

        try {
            dbConexion = conexion.openConnection();
            personaDAO = new PersonaDAO(dbConexion);
            listaTipo  = personaDAO.llenarListaTipoId();
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaTipo;
    }

    public List<OcupacionesVO> llenarListaOcupacion() throws ControlException {
        List<OcupacionesVO> listaOcupacion = new ArrayList<OcupacionesVO>();

        try {
            dbConexion     = conexion.openConnection();
            personaDAO     = new PersonaDAO(dbConexion);
            listaOcupacion = personaDAO.llenarListaOcupacion();
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaOcupacion;
    }

    public List<InstitucionVO> llenarListaInstitucion() throws ControlException {
        List<InstitucionVO> listaInstitucion = new ArrayList<InstitucionVO>();

        try {
            dbConexion       = conexion.openConnection();
            personaDAO       = new PersonaDAO(dbConexion);
            listaInstitucion = personaDAO.llenarListaInstitucion();
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaInstitucion;
    }

    public List<facultadesVO> llenarListaFacultades() throws ControlException {
        List<facultadesVO> listaFacultad = new ArrayList<facultadesVO>();

        try {
            dbConexion    = conexion.openConnection();
            personaDAO    = new PersonaDAO(dbConexion);
            listaFacultad = personaDAO.llenarListaFacultades();
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaFacultad;
    }

    public List<RolVo> llenarListaRoles() throws ControlException, SQLException {
        List<RolVo> listaRol = new ArrayList<RolVo>();

        try {
            dbConexion = conexion.openConnection();
            personaDAO = new PersonaDAO(dbConexion);
            listaRol   = personaDAO.llenarListaRoles();
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaRol;
    }

    public List<RolVo> consultarRolesPersonaPk(String idPersona) throws ControlException, SQLException {
        List<RolVo> listaRolPersona = new ArrayList<RolVo>();

        try {
            dbConexion      = conexion.openConnection();
            personaDAO      = new PersonaDAO(dbConexion);
            listaRolPersona = personaDAO.consultarRolesPersonaPk(idPersona);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaRolPersona;
    }

    public List<PersonaVO> consultarPersona(PersonaVO personaVO) throws ControlException {
        List<PersonaVO> listaPersonas = new ArrayList<PersonaVO>();

        try {
            dbConexion    = conexion.openConnection();
            personaDAO    = new PersonaDAO(dbConexion);
            listaPersonas = personaDAO.consultarPersona(personaVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaPersonas;
    }

    public GlobalPersonaTO consultarPersonaPk(GlobalPersonaTO personaTO) throws ControlException {
        try {
            dbConexion = conexion.openConnection();
            personaDAO = new PersonaDAO(dbConexion);
            personaTO  = personaDAO.consultarPersonaPk(personaTO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return personaTO;
    }

    public String actualizarPersona(PersonaVO personaVO, PersonaOcupacionVO ocupacionVO, String[] selectedOptionsO)
            throws ControlException {
        String       errorM  = "";
        String       errorM2 = "";
        PersonaRolVO pRolVO;

        try {
            dbConexion = conexion.openConnection();
            personaDAO = new PersonaDAO(dbConexion);
            errorM     = personaDAO.actualizarPersona(personaVO, ocupacionVO);

            if (errorM.equals("La operación fue exitosa")) {
                for (int i = 0; i < selectedOptionsO.length; i++) {
                    pRolVO = new PersonaRolVO();
                    pRolVO.setIdRol(selectedOptionsO[i]);
                    pRolVO.setIdPersona(personaVO.getIdPersona());
                    errorM2 = personaDAO.insertarRolPersona(pRolVO);

                    if (!errorM2.equals("OK")) {
                        errorM = errorM2;
                    }
                }
            }
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return errorM;
    }

    public String eliminarPersona(PersonaVO personaVO) throws ControlException {
        String errorM = "";

        try {
            dbConexion = conexion.openConnection();
            personaDAO = new PersonaDAO(dbConexion);
            errorM     = personaDAO.eliminarPersona(personaVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return errorM;
    }
}
